topic "Importing external libraries";
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[H4;b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;ph2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[b83;*+117 $$22,22#1546C2CD4112BAB0A26C534D6F11ED13:subtitle]
[2 $$0,0#00000000000000000000000000000000:Default]
[{_}%EN-US 
[s2; Importing external libraries&]
[s3; Table of contents&]
[s0; &]
[s0; [^topic`:`/`/ide`/app`/importext`_en`-us`#1^ 1. Importing large 
libraries]&]
[s0;     [^topic`:`/`/ide`/app`/importext`_en`-us`#1`_1^ 1.1 Introduction]&]
[s0;     [^topic`:`/`/ide`/app`/importext`_en`-us`#1`_2^ 1.2. Directives]&]
[s0; &]
[s3;:1: 1. Importing large libraries&]
[s22;:1`_1: 1.1 Introduction&]
[s5; Sometimes it is useful to transform 3rd party code into U`+`+ 
package. There are several methods to do that, however if 3rd 
party code is huge codebase of hundreds or thousands files, traditional 
approaches (e.g. put all these files into package) are tedious 
or outright impossible.&]
[s5; To solve this issue, concept of import description file was 
introduced. This describes which files of external library are 
to be compiled and helps with setting up include path.&]
[s5; Import description file is file in package with name [*/ `"import.ext`"]&]
[s5; Here is an example of import.ext content:&]
[s0; &]
[s7; files `*.cpp `*.c;&]
[s7; &]
[s7; exclude&]
[s7; -|port/vsipreload.cpp&]
[s7; -|ogr/generate`_encoding`_table.c&]
[s7; -|`*/geojson/`*&]
[s7; -|`*/sqlite/`*&]
[s7; -|`*/sqlite3/`*&]
[s7; -|`*/pg/`*&]
[s7; -|`*/sde/`*&]
[s7; -|`*/sosi/`*&]
[s7; -|`*/tiger/`*&]
[s7; -|`*/vfk/`*&]
[s7; -|`*/shape/`*&]
[s7; -|`*/libkml/`*&]
[s7; -|`*/dgn/`*&]
[s7; -|`*/arcobjects/`*&]
[s7; -|`*/dods/`*&]
[s7; -|`*/dwg/`*&]
[s7; -|`*/filegdb/`*&]
[s7; -|`*/fme/`*&]
[s7; -|`*/gpkg/`*&]
[s7; -|`*/grass/`*&]
[s7; -|`*/idb/`*&]
[s7; -|`*/ingres/`*&]
[s7; -|`*/ili/`*&]
[s7; -|`*/mdb/`*&]
[s7; -|`*/mysql/`*&]
[s7; -|`*/kml/`*&]
[s7; -|`*/nas/`*&]
[s7; -|`*/idrisi/`*&]
[s7; -|`*/xlsx/`*&]
[s7; -|`*/xls/`*&]
[s7; -|`*/oci/`*&]
[s7; -|`*/ogdi/`*&]
[s7; -|`*/ods/`*&]
[s7; -|`*/gpkg/`*&]
[s7; -|`*/osm/`*&]
[s7; -|port/cpl`_win32ce`_api.cpp&]
[s7; -|frmts/`*&]
[s7; ;&]
[s7; &]
[s7; exclude(WIN32) linux`*.cpp;&]
[s7; &]
[s7; includes `*.h `*.hpp;&]
[s7; &]
[s5; In this case, line with `"files`" basically says that all .cpp 
and .h files found in package folder are to be added into the 
project. `"exclude`" specifies exceptions to this. `"includes`" 
adds folders of all matching files into include path.&]
[s22;:1`_2: 1.2. Directives&]
[s5; Below is the set of directives that can be used in [* `"import.ext`"] 
file:&]
[s0; &]
[ {{2066:7934^ [s5; [* files]]
:: [s5; Adds all files that match the pattern the set of files to be 
added to package. Pattern can use `'`*`' wildcard.]
:: [s5; [* exclude]]
:: [s5; Removes files that match the pattern from the set.]
:: [s5; [* include`_path]]
:: [s5; Adds folders that match the pattern to the include path.]
:: [s5; [* exclude`_path]]
:: [s5; Removes directories from the include path (only folders added 
by import.ext can be removed)]
:: [s5; [* includes]]
:: [s5; Adds folders of all matching files into include path.]}}&]
[s0; &]
[s0; Note that all file paths are relative to the root of package 
directory.&]
[s0; &]
[s0; Directives are processed in the order they appear in the file, 
gradually adding and removing files in question.&]
[s0; &]
[s0; Directives can have condition on configuration flags, placed 
in parenthesis. Conditions follow the same rules as package conditions.&]
[s0; ]]